package src.lanqiao.true_question_C;

import java.util.Arrays;

/**
 * 给定N个加号、M个减号、一个长为N+M+1的数组，用数组和加减号组合，输出最大值
 *
 * input: 1 1
 *        1 2 3
 *
 * output: 4
 */
//public class Main {
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//        int m = sc.nextInt();
//        Long []nums = new Long[n + m + 1];
//        for (int i = 0; i < n+m+1; i++) {
//            nums[i] = sc.nextLong();
//        }
//
//
//        Arrays.sort(nums, Collections.reverseOrder());
//        Long ans = nums[0];
//        for (int i = 0; i < n || i < m; i++) {
//            Long t = 0L;
//            if(i < n) t += nums[i + 1];
//            if(i < m) t -= nums[n + m - i];
//
//            ans += t;
//        }
//
//        System.out.println(ans);
//
//    }
//}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException{
        int[] positive = new int[100000+1];  //储存正数的数组，int的取值范围2147483648
        int[] negative = new int[100000+1];
        int po = 0;    //正数的个数
        int ne = 0;	   //负数的个数
        int n = 0;    //正号的个数
        int m = 0;	  //负号的个数
        long sum = 0;
        n = MyReader.nextInt();
        m = MyReader.nextInt();
        for(int i=0; i<n+m+1; i++){  //读取数据
            int temp = MyReader.nextInt();
            if(temp>0)  positive[po++] = temp;
            else negative[ne++] = temp;
        }

        if(ne == n + m + 1) {
            Arrays.sort(negative,0,ne);
            sum += negative[ne - 1];
            for(int i=0; i<n-1; i++){
                sum -= negative[i];
            }
        }


        if(m<=0){    //负号的个数小于零， 将所有的数进行相加
            for(int i=0; i<po || i <ne; i++){
                if (i < po) sum = sum + positive[i];
                if (i < ne) sum = sum + negative[i];
            }
        }
        if(m<=ne&&m>0){  //负号的个数小于等于负数的个数，求绝对值和。
            for(int i=0; i<po; i++){
                sum = sum + positive[i];
            }
            for(int i=0; i<ne; i++){
                sum = sum - negative[i];
            }
        }
        if(m>ne){  //负号的个数大于负数的个数，先求和再减去多余负号个数的小正数。
            Arrays.sort(positive,0,po);  //将数组进行排序，默认是正序
            //不能写成Arrays.sort(a),因为这是对整个数组进行排序。数组中有很多是无效的零，
            //因为定义的时候将数组的大小设定为题目给的大上限值。默认值都是零
            if(ne==0){        //全是正数，减掉最小的数，把其他数的绝对值进行相加
                sum = sum - positive[0];
                for(int i=1; i<po; i++){   //将剩下的正数进行相加
                    sum = sum + positive[i];
                }
            }
            else{  //存在负数，  将所有数的绝对值进行相加
                for(int i=0; i<po; i++){
                    sum = sum + positive[i];
                }
                for(int i=0; i<ne; i++){
                    sum = sum - negative[i];
                }
            }

        }
        System.out.println(sum);
    }
}

class MyReader{
    static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));//定义字符流
    static StringTokenizer tokenizer = new StringTokenizer("");
    static String nextLine() throws IOException{// 读取下一行字符串
        return reader.readLine();
    }
    static String next() throws IOException {// 读取下一个字符串
        while (!tokenizer.hasMoreTokens()) {
            tokenizer = new StringTokenizer(reader.readLine());
        }
        return tokenizer.nextToken();
    }

    static int nextInt() throws IOException {// 读取下一个int型数值
        return Integer.parseInt(next());
    }

    static double nextDouble() throws IOException {// 读取下一个double型数值
        return Double.parseDouble(next());
    }
}
